home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer (Italian) 30 / PC Gamer IT CD 30 1-2.iso / MOTS / GAMEDATA / RESOURCE / JKMRES.GOO / cog_00_aiframepatrol.cog < prev    next >
Text File  |  1998-02-25  |  2KB  |  108 lines

  1. ## 00_AIFramePatrol.cog
  2. ## "patroller" travels patrol route of frames. 
  3. ## Patrol begins at startup unless either gosector or gosurface are assigned as triggers. 
  4. ## Compatible with 00_SendMessage. (Gosurface or gosector must be assigned or it will begin on startup.) 
  5.  
  6. ## Flex Variables:
  7. ##
  8. ## RouteStyle: use 0 for circular (or 2-point) patrol, 1 for linear, and 2 for random
  9. ## FramePause: use a constant value, or use 0 for random pauses between 2 and Maxpause (best for pedestrians)
  10. ## NumFrames: number of frames in the route, excluding frame 0; NOTE: Inaccurately high framenum results in 1-way patrol
  11. ## PatrolSpeed: 1 for walk (default), 2 for run
  12. ## MaxPause: longest pause at frame, used only if framepause = 0
  13.  
  14. symbols
  15. message    startup
  16. message    activate
  17. message    entered
  18. message    arrived
  19. message    timer
  20.  
  21. sector    gosector    linkid=1
  22. surface    gosurface    linkid=1
  23.  
  24. thing        patroller
  25.  
  26. float        patrolspeed=1.0
  27. float        framepause=1.0
  28. float        routestyle=0.0
  29. float        numframes=1.0
  30. float        maxpause=10.0
  31.  
  32. int        curframe=1        local
  33. int        framenum=0        local
  34. int        direction=1        local        // control forward or backward through frames
  35. int        begun=0        local
  36. int        testnum=0        local
  37. end
  38.  
  39. code
  40. startup:
  41.     if (gosector + gosurface == -2)    // no sector/surface assigned
  42.     {
  43.         call beginpatrol;
  44.     }
  45.     return;
  46.  
  47. activate:
  48.     call beginpatrol;
  49.     return;
  50.  
  51. entered:
  52.     if (GetSenderID() != 1) return;
  53.     
  54.     call beginpatrol;
  55.     return;
  56.     
  57. beginpatrol:
  58.     if (begun) return;
  59.     begun = 1;
  60.     
  61.     AISetMoveSpeed(patroller, patrolspeed);
  62.     
  63.     SetTimer(.1);
  64.     return;
  65.  
  66. arrived:
  67.     curframe = curframe + direction;
  68.     if (curframe > numframes)            // end of patrol
  69.     {
  70.         if (routestyle == 1)
  71.         {
  72.             direction = -1;            // if linear, reverse frame directional
  73.             curframe = numframes - 1;
  74.         }
  75.         else
  76.         {
  77.             curframe = 0;            // if circular, go to frame 0
  78.         }
  79.     }
  80.  
  81.     if ((curframe == -1) && (routestyle == 1))    // if linear and returned to initial frame
  82.     {
  83.         direction = 1;                    // restore forward frame directional
  84.         curframe = 0;
  85.     }
  86.  
  87.     if (routestyle == 2)
  88.     {
  89.         curframe = (Rand() * numframes) + 1;
  90.     }
  91.  
  92.     if (framepause > 0)
  93.     {
  94.         SetTimer(framepause);
  95.     }
  96.     else
  97.     {
  98.         SetTimer((Rand() * (maxpause - 1)) + 2);
  99.     }
  100.     return;
  101.  
  102. timer:
  103.     AISetLookFrame(patroller, curframe);
  104.     AISetMoveFrame(patroller, curframe);
  105.     return;
  106. end
  107.  
  108.